# hasattr,getattr,setattr,delattr这几个内置函数，均有对应的魔法方法


class C:

    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def __getattribute__(self, attrname):
        print("拿来吧你～")
        return super().__getattribute__(attrname)


c = C("小甲鱼", 18)
c_name = getattr(c, 'name')  # 拿来吧你～
print(c_name)  # 小甲鱼

c_age = c._C__age  # 拿来吧你～ 对象.属性名 底层也会调用 getattr 函数
print(c_age)  # 18

# 我们通过 getattr 访问一个不存在的属性呢？
c_not = c.not_exist  # 拿来吧你～ 可见还是调用了内置函数 getattr
# print(c_not)  # AttributeError: 'C' object has no attribute 'not_exist'

